package com.test.util;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

import com.test.clyq.entity.Category;
import com.test.clyq.entity.EntityItem;
import com.test.clyq.entity.Users;
import com.test.entity.Item;

/**
 * 对item的一些基础操作方法
 * 
 * @author Zouxf 2007-4-28
 */
public class ItemUtil {

	/** 工作类型为添加 */
	public final static int ADDWORKTYPE = 0;

	/** 工作类型为删除 */
	public final static int DELETEWORKTYPE = 1;

	/** 失败类型 */
	public static final int FAILDSSTATUS = 2;

	public static final Map<Class<? extends Item>, Integer> ITEMTYPEMAP = new LinkedHashMap<Class<? extends Item>, Integer>();

	/** 工作类型为登陆 */
	public final static int LOGINON = 3;

	/** 工作类型为退出 */
	public final static int LOGINOUT = 4;

	public static final Map<Integer, String> OPERATORMAP = new TreeMap<Integer, String>();

	public static final Map<Integer, String> STATUSMAP = new TreeMap<Integer, String>();

	/** 成功类型 */
	public static final int SUCCESSSTATUS = 1;

	public static final Map<Integer, String> TYPENAMEMAP = new TreeMap<Integer, String>();

	/** 工作类型为修改 */
	public final static int UPDATEWORKTYPE = 2;

	static {
		ItemUtil.ITEMTYPEMAP.put(Category.class, 1);
		ItemUtil.TYPENAMEMAP.put(1, "类别管理");

		ItemUtil.ITEMTYPEMAP.put(EntityItem.class, 2);
		ItemUtil.TYPENAMEMAP.put(2, "内容管理");

		ItemUtil.ITEMTYPEMAP.put(Users.class, 5);
		ItemUtil.TYPENAMEMAP.put(5, "用户管理");

		ItemUtil.STATUSMAP.put(ItemUtil.SUCCESSSTATUS, "成功");
		ItemUtil.STATUSMAP.put(ItemUtil.FAILDSSTATUS, "失败");

		ItemUtil.OPERATORMAP.put(ItemUtil.ADDWORKTYPE, "添加");
		ItemUtil.OPERATORMAP.put(ItemUtil.UPDATEWORKTYPE, "修改");
		ItemUtil.OPERATORMAP.put(ItemUtil.DELETEWORKTYPE, "删除");
		ItemUtil.OPERATORMAP.put(ItemUtil.LOGINON, "登录");
		ItemUtil.OPERATORMAP.put(ItemUtil.LOGINOUT, "退出系统");
	}

	/**
	 * 按照实体class获取操作的类型
	 * 
	 * @param clazz
	 * @return
	 */
	public static Integer getOperateDataType(Class<? extends Item> clazz) {
		return ItemUtil.ITEMTYPEMAP.get(clazz);
	}

	/**
	 * 按照实体id返回是增加操作还是删除操作 如果id为null,则返回增加操作,不为null返回修改操作
	 * 
	 * @param item
	 * @return
	 */
	public static int getOperateType(Item item) {
		if (item.getId() != null) {
			return ItemUtil.UPDATEWORKTYPE;
		} else {
			return ItemUtil.ADDWORKTYPE;
		}
	}

	/**
	 * 判断当前类是否需要记录工作日志,如果ITEMTYPEMAP不存在信息则返回false
	 * 
	 * @param clazz
	 * @return
	 */
	public static boolean isLog(Class<? extends Item> clazz) {
		return ItemUtil.getOperateDataType(clazz) != null;
	}
}
